package cn.xshi.oauth.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.xshi.common.util.StringUtil;
import cn.xshi.oauth.dao.OauthAdminDao;
import cn.xshi.oauth.dao.OauthAdminSysDao;
import cn.xshi.oauth.model.OauthAdmin;
import cn.xshi.oauth.model.OauthAdminSys;
import cn.xshi.oauth.service.OauthAdminService;
import cn.xshi.common.base.BaseService;
import cn.xshi.common.util.ExceptionUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Desc 管理员中心
 * @Author 邓纯杰
 * @CreateTime 2012-12-12 12:12:12
 */
@Service
public class OauthAdminServiceImpl extends BaseService implements OauthAdminService {

    @Resource
    private OauthAdminDao oauthAdminDao;

    @Resource
    private OauthAdminSysDao oauthAdminSysDao;

    /**
     *
     * @param condition
     * @return
     */
    public List<OauthAdmin> getOauthAdminList(Map<String,Object> condition){
        return oauthAdminDao.getOauthAdminList(condition);
    }

    /**
     *
     * @param oauthAdmin
     * @return
     */
    public int addOauthAdmin(OauthAdmin oauthAdmin){
        int i = 0;
        try {
            Map<String,Object> condition = new HashMap<>();
            condition.put("accountId",oauthAdmin.getAccountId());
            List<OauthAdmin> oauthAdmins = oauthAdminDao.getOauthAdminList(condition);
            if(CollectionUtil.isNotEmpty(oauthAdmins)){
                String sysModeId = oauthAdmin.getSysModeId();
                oauthAdmin =  oauthAdmins.get(0);
                oauthAdmin.setSysModeId(sysModeId);
            }else{
                oauthAdmin.setCreateId(getCurrentAccountId());
                oauthAdmin.setCreateTime(getDate());
                i = oauthAdminDao.addOauthAdmin(oauthAdmin);
            }
            condition = new HashMap<>();
            condition.put("sysModeId",oauthAdmin.getSysModeId());
            condition.put("adminId",oauthAdmin.getId());
            OauthAdminSys oauthAdminSys = oauthAdminSysDao.getSingleOauthAdminSys(condition);
            if(null == oauthAdminSys){
                oauthAdminSys = new OauthAdminSys();
                oauthAdminSys.setId(toUUID());
                oauthAdminSys.setAdminId(oauthAdmin.getId());
                oauthAdminSys.setSysModeId(oauthAdmin.getSysModeId());
                oauthAdmin.setCreateId(oauthAdmin.getCreateId());
                oauthAdmin.setCreateTime(oauthAdmin.getCreateTime());
                oauthAdminSysDao.addOauthAdminSys(oauthAdminSys);
            }
            i =1;
        } catch (Exception e) {
            i = 0;
            throw new ExceptionUtil(e.getMessage(),e.getCause());
        }
        return i;
    }

    /**
     *
     * @param condition
     * @return
     */
    public List<OauthAdmin> getOauthAdminListAll(Map<String,Object> condition){
        return oauthAdminDao.getOauthAdminListAll(condition);
    }

    /**
     * 从模块系统中移除管理员
     * @param oauthAdmin
     * @return
     */
    public int delOauthAdmin(OauthAdmin oauthAdmin){
        if(StringUtil.isEmpty(oauthAdmin.getSysModeId())){
            throw new ExceptionUtil("未能获取到模块编号：sysModeId");
        }

        if(StringUtil.isEmpty(oauthAdmin.getAccountId())){
            throw new ExceptionUtil("未能获取到账户编号：accountId");
        }
        int i = 0;
        try {
            Map<String,Object> condition = new HashMap<>();
            condition.put("accountId",oauthAdmin.getAccountId());
            List<OauthAdmin> oauthAdmins = oauthAdminDao.getOauthAdminList(condition);
            if(CollectionUtil.isNotEmpty(oauthAdmins) && oauthAdmins.size() == 1){
                //移除当前
                oauthAdminDao.delOauthAdmin(oauthAdmins.get(0).getId());
            }
            //移除分配表数据
            condition.put("sysModeId",oauthAdmin.getSysModeId());
            List<OauthAdminSys> oauthAdminSysList = oauthAdminSysDao.getOauthAdminSysListByCondition(condition);
            if(!CollectionUtil.isEmpty(oauthAdminSysList)){
                for(OauthAdminSys oauthAdminSys: oauthAdminSysList){
                    oauthAdminSysDao.delOauthAdminSys(oauthAdminSys.getId());
                }
            }
            i = 1;
        }catch (Exception e){
            throw  new ExceptionUtil("移除管理员出现异常");
        }

        return i;
    }
}
